import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let timelineItems = [
    {
        "label": "Timeline_Window1",
        "insertText": dedent`
        GUI:Timeline_Window1(\${1:widget}, \${2:timelineCB})
        `,
        "documentation": dedent`# 界面弹窗特效 1
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | timelineCB | 是   | function | 回调函数 |

        - 弹窗效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=03f85a6ed2e55e4683fcfa2b2065ef89)
        `
    },
    {
        "label": "Timeline_Window2",
        "insertText": dedent`
        GUI:Timeline_Window2(\${1:widget}, \${2:timelineCB})
        `,
        "documentation": dedent`# 界面弹窗特效 2
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | timelineCB | 是   | function | 回调函数 |

        - 弹窗效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=680189876aeeed47b9a4146b5b5fe836)
        `
    },
    {
        "label": "Timeline_Window3",
        "insertText": dedent`
        GUI:Timeline_Window3(\${1:widget}, \${2:timelineCB})
        `,
        "documentation": dedent`# 界面弹窗特效 3
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | timelineCB | 是   | function | 回调函数 |

        - 弹窗效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=295f3c9fdd8a23f472baadd4e3da2b91)
        `
    },
    {
        "label": "Timeline_Window4",
        "insertText": dedent`
        GUI:Timeline_Window4(\${1:widget}, \${2:timelineCB})
        `,
        "documentation": dedent`# 界面弹窗特效 4
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | timelineCB | 是   | function | 回调函数 |

        - 弹窗效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=576798efe374c994ec5420673ce7c2bf)
        `
    },
    {
        "label": "Timeline_Window5",
        "insertText": dedent`
        GUI:Timeline_Window5(\${1:widget}, \${2:timelineCB})
        `,
        "documentation": dedent`# 界面弹窗特效 5
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | timelineCB | 是   | function | 回调函数 |

        - 弹窗效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=300d9ba741e3140577e17e3b878a261e)
        `
    },
    {
        "label": "Timeline_Window6",
        "insertText": dedent`
        GUI:Timeline_Window6(\${1:widget}, \${2:timelineCB})
        `,
        "documentation": dedent`# 界面弹窗特效 6
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | timelineCB | 是   | function | 回调函数 |

        - 弹窗效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=dc71a59d3d406543465c92db7c69bf2b)
        `
    },
    {
        "label": "Timeline_SetTag",
        "insertText": dedent`
        GUI:Timeline_SetTag(\${1:action}, \${2:tag})
        `,
        "documentation": dedent`# 设置动画标记
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | action | 是   | obj  | 动作对象 |
        | tag    | 是   | int  | 标记值   |

        `
    },
    {
        "label": "Timeline_StopAll",
        "insertText": dedent`
        GUI:Timeline_StopAll(\${1:widget})
        `,
        "documentation": dedent`# 停止所有动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 控件对象 |

        `
    },
    {
        "label": "Timeline_StopByTag",
        "insertText": dedent`
        GUI:Timeline_StopByTag(\${1:widget}, \${2:tag})
        `,
        "documentation": dedent`# 通过标记停止动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 控件对象 |
        | tag    | 是   | int  | 标记值   |

        `
    },
    {
        "label": "Timeline_FadeOut",
        "insertText": dedent`
        GUI:Timeline_FadeOut(\${1:widget}, \${2:time}, \${3:timelineCB})
        `,
        "documentation": dedent`# 动画淡出效果
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | time       | 是   | int      | 时间     |
        | timelineCB | 是   | function | 回调函数 |

        - 淡出效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=3900ccbab7b16c56dbcfb2fc62cd18b2)
        `
    },
    {
        "label": "Timeline_FadeIn",
        "insertText": dedent`
        GUI:Timeline_FadeIn(\${1:widget}, \${2:time}, \${3:timelineCB})
        `,
        "documentation": dedent`# 动画淡入效果
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | time       | 是   | int      | 时间     |
        | timelineCB | 是   | function | 回调函数 |

        > **淡入需要先设置控件透明度**

        - 淡入效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=51a54ae9f13a972b70e71e2cba2d025d)
        `
    },
    {
        "label": "Timeline_FadeTo",
        "insertText": dedent`
        GUI:Timeline_FadeTo(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 动画透明度变化效果
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释          |
        | :--------- | :--- | :------- | :------------ |
        | widget     | 是   | obj      | 控件对象      |
        | value      | 是   | int      | 透明度(0-255) |
        | time       | 是   | int      | 时间          |
        | timelineCB | 是   | function | 回调函数      |

        - 修改透明度到某个值
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=81918cf5e2aaf95e6eded401758fa4db)
        `
    },
    {
        "label": "Timeline_ScaleTo",
        "insertText": dedent`
        GUI:Timeline_ScaleTo(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 放大缩小动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释            |
        | :--------- | :--- | :------- | :-------------- |
        | widget     | 是   | obj      | 控件对象        |
        | value      | 是   | int      | 缩放比例(0-100) |
        | time       | 是   | int      | 时间            |
        | timelineCB | 是   | function | 回调函数        |

        - 放大缩小到某个比例（放大缩小到原始的倍数）

          \`\`\`lua
          -- 实际上图片只放大了2倍
          local img = GUI:Image_Create(parent, "img", 0, 0, "res/bg.png")
          GUI:Timeline_ScaleTo(img, 2, 1, nil)
          GUI:Timeline_ScaleTo(img, 2, 1, nil)
          \`\`\`
        `
    },
    {
        "label": "Timeline_ScaleBy",
        "insertText": dedent`
        GUI:Timeline_ScaleBy(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 放大缩小动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释            |
        | :--------- | :--- | :------- | :-------------- |
        | widget     | 是   | obj      | 控件对象        |
        | value      | 是   | int      | 缩放比例(0-100) |
        | time       | 是   | int      | 时间            |
        | timelineCB | 是   | function | 回调函数        |

        - 放大缩小到某个比例（放大缩小多少倍数）

          \`\`\`lua
          -- 实际上图片放大了4倍
          local img = GUI:Image_Create(parent, "img", 0, 0, "res/bg.png")
          GUI:Timeline_ScaleBy(img, 2, 1, nil)
          GUI:Timeline_ScaleBy(img, 2, 1, nil)
          \`\`\`
        `
    },
    {
        "label": "Timeline_RotateTo",
        "insertText": dedent`
        GUI:Timeline_RotateTo(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 旋转动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释            |
        | :--------- | :--- | :------- | :-------------- |
        | widget     | 是   | obj      | 控件对象        |
        | value      | 是   | int      | 旋转角度(0-360) |
        | time       | 是   | int      | 时间            |
        | timelineCB | 是   | function | 回调函数        |

        - 旋转到某个角度（旋转到指定角度）
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=42b1c0005259534480b7cd6f059dc3aa)
        `
    },
    {
        "label": "Timeline_RotateBy",
        "insertText": dedent`
        GUI:Timeline_RotateBy(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 旋转动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释            |
        | :--------- | :--- | :------- | :-------------- |
        | widget     | 是   | obj      | 控件对象        |
        | value      | 是   | int      | 旋转角度(0-360) |
        | time       | 是   | int      | 时间            |
        | timelineCB | 是   | function | 回调函数        |

        - 旋转到某个角度（从原来角度 旋转到 某个角度）
        `
    },
    {
        "label": "Timeline_MoveTo",
        "insertText": dedent`
        GUI:Timeline_MoveTo(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 移动动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释           |
        | :--------- | :--- | :------- | :------------- |
        | widget     | 是   | obj      | 控件对象       |
        | value      | 是   | table    | {x = 0, y = 0} |
        | time       | 是   | int      | 时间           |
        | timelineCB | 是   | function | 回调函数       |

        - 移动到某坐标（移动绝对位置）
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=0f04a0785fb11a638b54455340566c9d)
        `
    },
    {
        "label": "Timeline_MoveBy",
        "insertText": dedent`
        GUI:Timeline_MoveBy(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 移动动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释           |
        | :--------- | :--- | :------- | :------------- |
        | widget     | 是   | obj      | 控件对象       |
        | value      | 是   | table    | {x = 0, y = 0} |
        | time       | 是   | int      | 时间           |
        | timelineCB | 是   | function | 回调函数       |

        - 移动到某坐标（移动相对位置）
        `
    },
    {
        "label": "Timeline_Blink",
        "insertText": dedent`
        GUI:Timeline_Blink(\${1:widget}, \${2:value}, \${3:time}, \${4:timelineCB})
        `,
        "documentation": dedent`# 闪烁动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | value      | 是   | int      | 闪烁次数 |
        | time       | 是   | int      | 时间     |
        | timelineCB | 是   | function | 回调函数 |

        - 闪烁效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=7a39a973ecae51a8f66748c0da9e5faa)
        `
    },
    {
        "label": "Timeline_Shake",
        "insertText": dedent`
        GUI:Timeline_Shake(\${1:widget}, \${2:time}, \${3:x}, \${4:y}, \${5:timelineCB})
        `,
        "documentation": dedent`# 震动动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释        |
        | :--------- | :--- | :------- | :---------- |
        | widget     | 是   | obj      | 控件对象    |
        | time       | 是   | int      | 时间        |
        | x          | 是   | int      | X轴震动像素 |
        | y          | 是   | int      | Y轴震动像素 |
        | timelineCB | 是   | function | 回调函数    |

        - 震动效果
          ![img](http://engine-doc.996m2.com/server/index.php?s=/api/attachment/visitFile&sign=782737b2cce9e0cbe34f030b1e870faf)
        `
    },
    {
        "label": "Timeline_Waggle",
        "insertText": dedent`
        GUI:Timeline_Waggle(\${1:widget}, \${2:time}, \${3:angle})
        `,
        "documentation": dedent`# 疯狂抖动动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数   | 必选 | 类型 | 注释              |
        | :----- | :--- | :--- | :---------------- |
        | widget | 是   | obj  | 控件对象          |
        | time   | 是   | int  | 时间              |
        | angle  | 是   | int  | 抖动幅度（0-360） |

        `
    },
    {
        "label": "Timeline_DelayTime",
        "insertText": dedent`
        GUI:Timeline_DelayTime(\${1:widget}, \${2:time}, \${3:timelineCB})
        `,
        "documentation": dedent`# 动画延迟播放
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | time       | 是   | int      | 延迟时间 |
        | timelineCB | 是   | function | 回调函数 |

        `
    },
    {
        "label": "Timeline_CallFunc",
        "insertText": dedent`
        GUI:Timeline_CallFunc(\${1:widget}, \${2:time}, \${3:timelineCB})
        `,
        "documentation": dedent`# 动画回调方法
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数       | 必选 | 类型     | 注释     |
        | :--------- | :--- | :------- | :------- |
        | widget     | 是   | obj      | 控件对象 |
        | time       | 是   | int      | 延迟时间 |
        | timelineCB | 是   | function | 回调函数 |

        `
    },
    {
        "label": "Timeline_Show",
        "insertText": dedent`
        GUI:Timeline_Show(\${1:widget}, \${2:time})
        `,
        "documentation": dedent`# 动画延迟显示
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 控件对象 |
        | time   | 是   | int  | 延迟时间 |

        `
    },
    {
        "label": "Timeline_Hide",
        "insertText": dedent`
        GUI:Timeline_Hide(\${1:widget}, \${2:time})
        `,
        "documentation": dedent`# 动画延迟隐藏
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 控件对象 |
        | time   | 是   | int  | 延迟时间 |

        `
    },
    {
        "label": "Timeline_EaseSineIn_MoveTo",
        "insertText": dedent`
        GUI:Timeline_EaseSineIn_MoveTo(\${1:widget}, \${2:value}, \${3:time}, \${4:callback})
        `,
        "documentation": dedent`# 缓动动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数     | 必选 | 类型     | 注释             |
        | :------- | :--- | :------- | :--------------- |
        | widget   | 是   | obj      | 对象             |
        | value    | 是   | table    | 目标坐标位置     |
        | time     | 是   | int      | 动作时间         |
        | callback | 否   | function | 动作执行完的回调 |

        - widget 对象由慢到快，移动到目标位置
        `
    },
    {
        "label": "Timeline_EaseSineOut_MoveTo",
        "insertText": dedent`
        GUI:Timeline_EaseSineOut_MoveTo(\${1:widget}, \${2:value}, \${3:time}, \${4:callback})
        `,
        "documentation": dedent`# 缓动动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数     | 必选 | 类型     | 注释             |
        | :------- | :--- | :------- | :--------------- |
        | widget   | 是   | obj      | 对象             |
        | value    | 是   | table    | 目标坐标位置     |
        | time     | 是   | int      | 动作时间         |
        | callback | 否   | function | 动作执行完的回调 |

        - widget 对象由快到慢，移动到目标位置
        `
    },
    {
        "label": "Timeline_DigitChange",
        "insertText": dedent`
        GUI:Timeline_DigitChange(\${1:widget}, \${2:cur}, \${3:target}, \${4:interval})
        `,
        "documentation": dedent`# 数字滚动动画
        [在线文档](http://engine-doc.996m2.com/web/#/22/2177)

        | 参数     | 必选 | 类型 | 注释                                                     |
        | :------- | :--- | :--- | :------------------------------------------------------- |
        | widget   | 是   | obj  | 对象 [ 仅限Button、Text控件] （3.40.8支持TextAtlas控件） |
        | cur      | 是   | int  | 当前数值                                                 |
        | target   | 是   | int  | 目标数值                                                 |
        | interval | 否   | int  | 变动间隔（秒）                                           |

        - widget 数字滚动动画
        `
    }
]


export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    timelineItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}

